/*
* Copyright (C) 2010-2012 Magnus Skjegstad
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
* 
* The latest version of this library can be downloaded from http://mist-pubsub.googlecode.com
* 
*/
package com.skjegstad.mist2.datatypes;

import java.util.Map.Entry;

/**
 *
 * @author Magnus Skjegstad
 */
public class SimpleEntry<E,T> implements Entry<E,T> {
    private E key;
    private T value;

    public SimpleEntry(E key, T value) {
        this.key = key;
        this.value = value;
    }     

    public E getKey() {
        return key;
    }

    public T getValue() {
        return value;
    }

    public T setValue(T value) {
        T oldValue = this.value;
        this.value = value;
        return oldValue;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (! (obj instanceof Entry)) {
            return false;
        }
        final Entry<E, T> e2 = (Entry<E, T>) obj;
        final Entry<E, T> e1 = this;

        // taken from entry doc's
        return (e1.getKey()==null ? e2.getKey()==null : e1.getKey().equals(e2.getKey()))  &&
               (e1.getValue()==null ? e2.getValue()==null : e1.getValue().equals(e2.getValue()));
        
    }

    @Override
    public int hashCode() {
        // taken from entry docs
        final Entry<E, T> e = this;
        return (e.getKey()==null   ? 0 : e.getKey().hashCode()) ^
               (e.getValue()==null ? 0 : e.getValue().hashCode());
    }
    
    
    
}
